iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Web 3

當 APP develop 遇上 web3 與 Metaverse 浪潮 系列 第 19

[Day 拾玖] 來開發元宇宙中藥鋪吧7- 載入畫面

  • 分享至 

  • xImage
  •  

我們可以利用 {children} 傳入 React compment 的方式製作話載入場景時的過場頁面


 <Intro>
      <App />
 </Intro>
    
    
export default function Intro({ children }) {
  return (
    <div>
    { children }
    </div>}
  );


實作 Intro

import { Suspense, cloneElement, useEffect, useState } from 'react'
import Logo from './Logo'

function Ready({ setReady }) {
  useEffect(() => () => void setReady(true), [])
  return null
}

export default function Intro({ children }) {
  const [clicked, setClicked] = useState(false)
  const [ready, setReady] = useState(false)
  return (
    <>
      <Suspense fallback={<Ready setReady={setReady} />}>{cloneElement(children, { ready: clicked && ready })}</Suspense>
      <div className={`fullscreen bg ${ready ? 'ready' : 'notready'} ${clicked && 'clicked'}`}>
        <div className="stack">
          {/* <a href="#" onClick={() => setClicked(true)}>
            {!ready ? 'loading' : 'click to continue'}
          </a> */}
          <img onClick={() => setClicked(true)} src="/藥堂.svg" width="100%" alt="SVG as an image" />
          {/* <Logo /> */}
        </div>
      </div>
    </>
  )
}

在最外層導入

import { createRoot } from 'react-dom/client'
import './styles.css'
import App from './App'
import Intro from './Intro'

createRoot(document.getElementById('root')).render(
  <>
    <Intro>
      <App />
    </Intro>
  </>
)


上一篇
[Day 拾八] 來開發元宇宙中藥鋪吧-6 基礎場景裝配
下一篇
[Day 貳拾] 來開發元宇宙中藥鋪吧8- 載入時顯示 3D 牌匾
系列文
當 APP develop 遇上 web3 與 Metaverse 浪潮 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言